/*
GanttProject is an opensource project management tool.
Copyright (C) 2011 GanttProject Team

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
package net.sourceforge.ganttproject.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import net.sourceforge.ganttproject.language.GanttLanguage;

/**
 * This class groups static methods together to handle dates.
 *
 * @author bbaranne (Benoit Baranne)
 */
public class DateUtils {
    /**
     * This method tries to parse the given date according to the given locale.
     * Actually, this method tries to parse the given string with several
     * DateFormat : Short, Medium, Long and Full. Normally if you give an
     * appropriate locale in relation with the string, this method will return
     * the correct date.
     *
     * @param date
     *            String representation of a date.
     * @param locale
     *            Locale use to parse the date with.
     * @return A date object.
     * @throws ParseException
     *             Exception thrown if parsing is fruitless.
     */
    public static Date parseDate(String date)
            throws ParseException {
        DateFormat[] formats = new DateFormat[] {
                GanttLanguage.getInstance().getShortDateFormat(),
                GanttLanguage.getInstance().getMediumDateFormat(),
                GanttLanguage.getInstance().getLongDateFormat()
        };
        //DateFormat dfFull = DateFormat.getDateInstance(DateFormat.FULL, locale);
        for (int i=0; i<formats.length; i++) {
            try {
                return formats[i].parse(date);
            }
            catch (ParseException e) {
                if (i+1 == formats.length) {
                    throw e;
                }
            }
            catch (IllegalArgumentException e) {
                if (i+1 == formats.length) {
                    throw e;
                }

            }
        }
        throw new ParseException("Failed to parse date="+date, 0);
    }
}
